/**
 * 
 */
package impresor.etiquetas.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.Type;

/**
 * @author Pablo Moreno
 * 
 */
@Entity
@Table(name = "TBL_TipoDocumentalCliente", catalog = "matrix")
public class TipoDocumento implements Serializable {

    private static final long serialVersionUID = 9108035824734296599L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "TipDocCliId")
    private long idTipoDocumento;

    @Column(name = "TipDocCliNombre")
    private String nombre;

    @Column(name = "TipDocCliDescripcion")
    private String descripcion;

    @Column(name = "TipDocCliTiempoObjetivo")
    private Float tiempoObjectivo;

    @Column(name = "CliId")
    private Long idCliente;

    @Column(name = "DepId")
    private Long idDepartamento;

    @Column(name = "AreId")
    private Long idArea;

    @ManyToOne
    @JoinColumn(name = "TipCarDocId")
    @ForeignKey(name="FK_TBL_TipoDocumentalCliente_TBL_TipoCargaDocumento")
    private TipoCargaDocumento tipoCargaDocumento;

    @Column(name = "DateAdded")
    private Date fechaAlta;

    @Column(name = "IsDeleted", columnDefinition = "TINYINT")
    @Type(type = "org.hibernate.type.NumericBooleanType")
    private boolean eliminado;

    /**
     * @param nombre
     * @param descripcion
     * @param tiempoObjectivo
     * @param cliente
     * @param departamento
     * @param area
     * @param tipoCargaDocumento
     */
    public TipoDocumento(String nombre, String descripcion, Float tiempoObjectivo, Long cliente, Long departamento,
	    Long area, TipoCargaDocumento tipoCargaDocumento) {
	super();
	this.nombre = nombre;
	this.descripcion = descripcion;
	this.tiempoObjectivo = tiempoObjectivo;
	this.idCliente = cliente;
	this.idDepartamento = departamento;
	this.idArea = area;
	this.tipoCargaDocumento = tipoCargaDocumento;
    }

    /**
     * @param nombre
     * @param tiempoObjectivo
     * @param cliente
     * @param departamento
     * @param area
     * @param tipoCargaDocumento
     */
    public TipoDocumento(String nombre, Float tiempoObjectivo, Long cliente, Long departamento, Long area,
	    TipoCargaDocumento tipoCargaDocumento) {
	super();
	this.nombre = nombre;
	this.tiempoObjectivo = tiempoObjectivo;
	this.idCliente = cliente;
	this.idDepartamento = departamento;
	this.idArea = area;
	this.tipoCargaDocumento = tipoCargaDocumento;
    }

    /******* SETTER & GETTER *******/
    public long getIdTipoDocumento() {
	return idTipoDocumento;
    }

    public void setIdTipoDocumento(long idDocumento) {
	this.idTipoDocumento = idDocumento;
    }

    public String getNombre() {
	return nombre;
    }

    public void setNombre(String nombre) {
	this.nombre = nombre;
    }

    public String getDescripcion() {
	return descripcion;
    }

    public void setDescripcion(String descripcion) {
	this.descripcion = descripcion;
    }

    public Float getTiempoObjectivo() {
	return tiempoObjectivo;
    }

    public void setTiempoObjectivo(Float tiempoObjectivo) {
	this.tiempoObjectivo = tiempoObjectivo;
    }

    /**
     * @return the idCliente
     */
    public Long getIdCliente() {
        return idCliente;
    }

    /**
     * @param idCliente the idCliente to set
     */
    public void setIdCliente(Long idCliente) {
        this.idCliente = idCliente;
    }

    /**
     * @return the idDepartamento
     */
    public Long getIdDepartamento() {
        return idDepartamento;
    }

    /**
     * @param idDepartamento the idDepartamento to set
     */
    public void setIdDepartamento(Long idDepartamento) {
        this.idDepartamento = idDepartamento;
    }

    /**
     * @return the idArea
     */
    public Long getIdArea() {
        return idArea;
    }

    /**
     * @param idArea the idArea to set
     */
    public void setIdArea(Long idArea) {
        this.idArea = idArea;
    }

    public TipoCargaDocumento getTipoCargaDocumento() {
	return tipoCargaDocumento;
    }

    public void setTipoCargaDocumento(TipoCargaDocumento tipoCargaDocumento) {
	this.tipoCargaDocumento = tipoCargaDocumento;
    }

    public Date getFechaAlta() {
	return fechaAlta;
    }

    public void setFechaAlta(Date fechaAlta) {
	this.fechaAlta = fechaAlta;
    }

    public boolean isEliminado() {
	return eliminado;
    }

    public void setEliminado(boolean eliminado) {
	this.eliminado = eliminado;
    }

    @Override
    public String toString() {
	StringBuilder builder = new StringBuilder();
	builder.append("TipoDocumento [idTipoDocumento=").append(idTipoDocumento).append(", nombre=").append(nombre)
		.append(", cliente=").append(idCliente).append("]");
	return builder.toString();
    }

}
